跳到主要内容

JZ36 两个链表的第一个公共节点

https://www.nowcoder.com/practice/6ab1d9a29e88450685099d45c9e31e46

这题考察的是链表追踪问题,两个链表有公共节点时总是能追上,当两个同时为 null 表示不存在公共节点

/*
public class ListNode {
int val;
ListNode next = null;

ListNode(int val) {
this.val = val;
}
}*/
public class Solution {
public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) {
if (pHead1 == null || pHead2 == null) return null;

ListNode p1 = pHead1;
ListNode p2 = pHead2;
// 长度相同有公共结点,第一次就遍历到;
// 没有公共结点,走到尾部 NULL 相遇,返回 NULL

// 长度不同有公共结点,第一遍差值就出来了,第二遍一起到公共结点;
// 没有公共,一起到结尾NULL。
while(p1 != p2) {
p1 = (p1 == null ? pHead2 : p1.next);
p2 = (p2 == null ? pHead1 : p2.next);
}

return p1;
}
}